﻿using System.Collections.Generic;
using CTS.Com.Domain.Constants;
using CTS.Com.Domain.Helper;
using CTS.Com.Domain.Model;
using CTS.Data.APStorageFiles.Domain.Utils;
using CTS.W._150101.Models.Domain.Dao.Client;
using CTS.W._150101.Models.Domain.Model.Client.Gallery;
using CTS.W._150101.Models.Domain.Object.Client;

namespace CTS.W._150101.Models.Domain.Logic.Client.Gallery
{
    /// <summary>
    /// FilterLogic
    /// </summary>
    public class FilterLogic
    {
        #region Execute Method
        /// <summary>
        /// Xử lý filter.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        /// <returns>DataModel</returns>
        public FilterDataModel Execute(FilterDataModel inputObject)
        {
            // Kiểm tra thông tin
            Check(inputObject);
            // Lấy thông tin
            var resultObject = GetInfo(inputObject);
            // Kết quả trả về
            return resultObject;
        }
        #endregion

        #region Private Method
        /// <summary>
        /// Kiểm tra thông tin.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        private void Check(FilterDataModel inputObject)
        {
        }

        /// <summary>
        /// Lấy thông tin.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        /// <returns>DataModel</returns>
        private FilterDataModel GetInfo(FilterDataModel inputObject)
        {
            // Khởi tạo biến cục bộ
            var getResult = new FilterDataModel();
            // Map dữ liệu
            DataHelper.CopyObject(inputObject, getResult);
            // Lấy đối tượng pager
            var pagerData = GetPagerData(inputObject);
            // Gán giá trị trả về
            getResult.ListData = pagerData.ListData;
            getResult.Total = pagerData.Total;
            // Kết quả trả về
            return getResult;
        }

        /// <summary>
        /// Lấy đối tượng pager
        /// </summary>
        private PagerInfoModel<PhotoObject> GetPagerData(FilterDataModel inputObject)
        {
            // Khởi tạo biến cục bộ
            var pagerResult = new PagerInfoModel<PhotoObject>();
            var listData = new List<PhotoObject>();
            var processDao = new GalleryDao();
            var storageFileCom = new StorageFileCom();
            // Lấy đối tượng pager
            var pagerData = processDao.GetPagerData(inputObject);
            // Khai báo biến dùng trong loop
            PhotoObject info = null;
            // Duyệt danh sách đối tượng
            foreach (var obj in pagerData.ListData) {
                // Khởi tạo đối tượng
                info = new PhotoObject();
                // Gán giá trị vào đối tượng
                info.PhotoCd = obj.PhotoCd;
                info.PhotoName = obj.PhotoName;
                info.PhotoImage = storageFileCom.GetFileName(
                    Logics.LOCALE_DEFAULT,
                    obj.FileCd,
                    false);
                // Thêm vào đối tượng kết quả
                listData.Add(info);
            }
            // Gán giá trị trả về
            pagerResult.ListData = listData;
            pagerResult.Total = pagerData.Total;
            // Kết quả trả về
            return pagerResult;
        }
        #endregion
    }
}
